SQL dotaz
Otázka od: Lasevic, Martin
14. 6. 2004 10:40
Zdravim,
resim nasledujici SQL dotaz a zatim si s tim po nekolika dnech nevim rady (
pritom nesmim pouzit ani view ani SP).
Mame klienty, kteri jsou navstevovani nasimi obchodniky a na kazde schuzce
se bavi o produktech ( nekdy stejnych, nekdy jinych).
Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam klientu a posledni
informaci o produktu, tzn. ze pokud se vyskytuje o produktu info vickrat,
tak pouzit info z posledni navstevy.
Napada vas, jak na to?
Diky za pomoc
Martin
======================================
ing. Martin Lasevic
Software Specialist
Tel.: +420-2-51 02 11 30, +420-602-298 904
Fax: +420-2-51 02 11 23
mailto:mlasevic@ratiopharm.cz
Odpovedá: Karel Rys
18. 10. 2002 8:57
Tomáš Fajman dne 18 Oct 2002 v 9:30:
> Prosim pomozte mi nekdo :O)
>
> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval
> bych napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v
> kterych je PIN ktere neni v TAB2. Predem dikes za radu
Ahoj, snad takhle:
SELECT a.*
FROM Tab1 a
LEFT OUTER JOIN Tab2 b on (b.Pin=a.Pin)
WHERE b.Pin IS NULL
Existuje neco jako WHERE EXISTS..., jenze to myslim byvalo pomalejsi...
Karel Rys
Odpovedá: bardon
18. 10. 2002 13:23
Takhle to delam na MSSQL
SELECT TAB1.PIN
FROM TAB1
LEFT OUTER JOIN TAB2 ON TAB1.PIN = TAB2.PIN
WHERE TAB2.PIN IS NULL
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Tomas Fajman
Prosim pomozte mi nekdo :O)
Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval bych
napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v kterych je
PIN ktere neni v TAB2. Predem dikes za radu
Odpovedá: Lstiburek Pavel
18. 10. 2002 11:37
SELECT TAB1.* FROM TAB1 LEFT OUTER JOIN TAB2 ON TAB1.PIN = TAB2.PIN
WHERE TAB2.PIN IS NULL
nebo
SELECT * FROM TAB1 WHERE PIN NOT IN ( SELECT PIN FROM TAB2)
Pavel
PS: Prvni verze byva rychlejsi pokud jsou tabulky vetsi, a indexovane dle
PIN
> Od: Tomáš Fajman [mailto:tomas.fajman@ortex.cz]
> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a
> potreboval bych
> napsat 'select * from TAB1' ale aby mi vybral jen ty
> zaznamy v kterych je
> PIN ktere neni v TAB2. Predem dikes za radu
Odpovedá: Ing. Pavel Žilinec
18. 10. 2002 9:17
select *
from Tab1
where not exists(
select top 1 Tab2.PIN
from Tab2
where Tab2.PIN = Tab1.PIN)
nebo
select Tab1.*
from Tab1
left outer join Tab2 on Tab1.PIN = Tab2.PIN
where Tab2.PIN is null
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
TF> Prosim pomozte mi nekdo :O)
TF> Mam dve tabulky TAB1 a TAB2 a v obouch je sloupec PIN a potreboval bych
TF> napsat 'select * from TAB1' ale aby mi vybral jen ty zaznamy v kterych je
TF> PIN ktere neni v TAB2. Predem dikes za radu
Odpovedá: Ing. Pavel Zilinec
9. 4. 2004 4:34
Jednak Tva konstrukc zpusobi, ze kdyz bude mit odberatel vice
objednavek, tak se Ti take tolikrat vrati (melo by tam byt distinct)
Jaky SQL server?
MS SQL:
select odb.nazev
from Odberatele odb
left outer join Objednavky obj on odb.id_odberatele = obj.id_odberatele
where obj.id_odberatele is null
Mnoznost pro jiny server:
select odb.nazev
from Odberatele odb
where not odb.id_odberatele in (select distinct obj.id_odberatele from
Objednavky obj)
MS SQL (Tvuj puvodni dotaz)
select distinct odb.nazev
from Odberatele odb
join Objednavky obj on odb.id_odberatele = obj.id_odberatele
--
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
Friday, April 9, 2004, 1:17:38 AM, bylo napsano:
DK> Zdravim,
DK> mam jednoduchy SQL dotaz, ktery vybere vsechny odberatele, kteri maji
DK> objednavku,
DK> select odb.nazev from Odberatele odb, Objednavky obj
DK> where odb.id_odberatele = obj.id_odberatele
DK> lze sestrojit dotaz, ktery vybere vsechny odberatele, kteri NEMAJI
DK> objednavku?
DK> David Klodner
Odpovedá: petr palicka
9. 4. 2004 6:14
Ahoj,
ja osobne bych ten dotaz napsal takto:
select distinct
odb.nazev
from
Odberatele odb
left join Objednavky obj on obj.id_odberatele = odb.id_odberatele
no a ten obraceny takto:
select distinct
odb.nazev
from
Odberatele odb
left join Objednavky obj on obj.id_odberatele = odb.id_odberatele
where
obj.id_odberatele is null
nevim jak kde ale na FB by to melo slapat (imho na ledascem,
je to standardni left join)
peca
Odpovedá: Blazek Jaroslav
9. 4. 2004 7:13
Ahoj,
> d.klodner@ordis.cz 9.4.2004 1:17:38 >>>
>lze sestrojit dotaz, ktery vybere vsechny odberatele, kteri NEMAJI
>objednavku?
SELECT *
FROM Odberatel od
WHERE NOT EXISTS(SELECT * FROM Objednavka ob WHERE od.IDOdberatel =
ob.IDOdberatel)
S pozdravem
Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644
Odpovedá: Ludek ZITA
9. 4. 2004 19:07
On Behalf Of Dalibor
> Ahoj,
> potrebuji zjistit jednu vetu z kazde skupiny ze vsemi sloupci
> s nejnovejsim casem pro dany datum
>
> Da se to nejak?
Ahoj.
Mozna ano.
Ludek
P.S. Pokud by se ti moje odpoved nezdala dostatecna tak je to proto, ze
odpovida Tvemu "zadani"
Takze asi nam budes muset prozradit datovou strukturu a typ SQL serveru.
Jinak Ti nikdo nepomuze.
Odpovedá: Ing. Pavel Zilinec
14. 4. 2004 11:14
:-) Asi neodpovim na otazku, ale budiz
Dejme tomu, ze dana skupina je v PoleSkup
select a.*
from Tabule a
join (
select pom.PoleSkup, max(pom.Datum)
from Tabule pom
group by pom.PoleSkup) b on a.PoleSkup = b.PoleSkup and a.Datum = b.Datum
order by a.PoleSkup
nebo stejny vysledek jinym zapisem
select a.*
from Tabule a
where a.Datum = (select max(b.Datum) from Tabule b where a.PoleSkup =
b.PoleSkup)
order by a.PoleSkup
--
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
Friday, April 9, 2004, 8:07:39 PM, bylo napsano:
LZ> On Behalf Of Dalibor
>> Ahoj,
>> potrebuji zjistit jednu vetu z kazde skupiny ze vsemi sloupci
>> s nejnovejsim casem pro dany datum
>>
>> Da se to nejak?
LZ> Ahoj.
LZ> Mozna ano.
LZ> Ludek
LZ> P.S. Pokud by se ti moje odpoved nezdala dostatecna tak je to proto, ze
LZ> odpovida Tvemu "zadani"
LZ> Takze asi nam budes muset prozradit datovou strukturu a typ SQL serveru.
LZ> Jinak Ti nikdo nepomuze.
LZ> __________ Informace od NOD32 1.716 (20040413) __________
LZ> Tato zprava byla proverena antivirovym systemem NOD32.
LZ> http://www.nod32.cz
Odpovedá: Lstiburek Pavel
14. 6. 2004 11:51
Chtelo by to typ serveru a hrubou strukturu zucastnenych tabulek.
Pavel
> From: Lasevic, Martin [mailto:mlasevic@ratiopharm.cz]
> resim nasledujici SQL dotaz a zatim si s tim po nekolika
> dnech nevim rady (
> pritom nesmim pouzit ani view ani SP).
>
> Mame klienty, kteri jsou navstevovani nasimi obchodniky a na
> kazde schuzce
> se bavi o produktech ( nekdy stejnych, nekdy jinych).
>
> Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam
> klientu a posledni
> informaci o produktu, tzn. ze pokud se vyskytuje o produktu
> info vickrat,
> tak pouzit info z posledni navstevy.
>
Odpovedá: BS Info
14. 6. 2004 12:21
Zkuste select top with ties
btw: sp jsou v poslednim upg genup sputistelna, stejne tak i views.
Roman
----- Original Message -----
From: "Lasevic, Martin" <mlasevic@ratiopharm.cz>
To: <delphi-l@clexpert.cz>
Sent: Monday, June 14, 2004 11:34 AM
Subject: SQL dotaz
> Zdravim,
>
> resim nasledujici SQL dotaz a zatim si s tim po nekolika dnech nevim rady
(
> pritom nesmim pouzit ani view ani SP).
>
> Mame klienty, kteri jsou navstevovani nasimi obchodniky a na kazde schuzce
> se bavi o produktech ( nekdy stejnych, nekdy jinych).
>
> Mam za ukol vytvorit sql dotaz, ktery mi vyjede seznam klientu a posledni
> informaci o produktu, tzn. ze pokud se vyskytuje o produktu info vickrat,
> tak pouzit info z posledni navstevy.
>
> Napada vas, jak na to?
>
> Diky za pomoc
>
> Martin
>
> ======================================
> ing. Martin Lasevic
> Software Specialist
> Tel.: +420-2-51 02 11 30, +420-602-298 904
> Fax: +420-2-51 02 11 23
> mailto:mlasevic@ratiopharm.cz
>
>
>
>